From 10cd0830a162ff81e5e3747393ef4098bde38649 Mon Sep 17 00:00:00 2001 From: "mjw@wray-m-3.hpl.hp.com" Date: Thu, 22 Jul 2004 16:39:49 +0000 Subject: [PATCH] bitkeeper revision 1.1108.1.11 (40ffedd53In0viK6nHqcjQ7ZlYdFkw) Filling-in vnet support. --- tools/python/xen/xend/server/SrvVnetDir.py | 109 ++++++++++++++++++++- tools/python/xen/xend/server/netif.py | 4 + 2 files changed, 112 insertions(+), 1 deletion(-) diff --git a/tools/python/xen/xend/server/SrvVnetDir.py b/tools/python/xen/xend/server/SrvVnetDir.py index a8a814192d..3577cb631f 100644 --- a/tools/python/xen/xend/server/SrvVnetDir.py +++ b/tools/python/xen/xend/server/SrvVnetDir.py @@ -1,9 +1,116 @@ # Copyright (C) 2004 Mike Wray +from xen.xend import sxp +from xen.xend.Args import FormFn +from xen.xend import PrettyPrint +from xen.xend import XendVnet + from SrvDir import SrvDir +class SrvVnet(SrvDir): + + def __init__(self, vnetinfo): + SrvDir.__init__(self) + self.vnetinfo = vnetinfo + self.xvnet = XendVnet.instance() + + def op_delete(self, op, req): + val = self.xvnet.vnet_delete(self.vnetinfo.id) + return val + + def render_POST(self, req): + return self.perform(req) + + def render_GET(self, req): + if self.use_sxp(req): + req.setHeader("Content-Type", sxp.mime_type) + sxp.show(self.vnetinfo.sxpr(), out=req) + else: + req.write('') + self.print_path(req) + req.write('

Vnet %s

' % self.vnetinfo.id) + req.write("
")
+            PrettyPrint.prettyprint(self.vnetinfo.sxpr(), out=req)
+            req.write("
") + self.form(req) + req.write('') + return '' + + def form(self, req): + url = req.prePathURL() + req.write('
' % url) + req.write('') + req.write('
') + class SrvVnetDir(SrvDir): """Vnet directory. """ - pass + def __init__(self): + SrvDir.__init__(self) + self.xvnet = XendVnet.instance() + + def vnet(self, x): + val = None + vnetinfo = self.xvnet.vnet_get(x) + if not vnetinfo: + raise XendError('No such vnet ' + str(x)) + val = SrvVnet(vnetinfo) + return val + + def get(self, x): + v = SrvDir.get(self, x) + if v is not None: + return v + v = self.vnet(x) + return v + + def op_create(self, op, req): + fn = FormFn(self.xvnet.vnet_create, + [['config', 'sxpr']]) + val = fn(req.args, {}) + return val + + def render_POST(self, req): + return self.perform(req) + + def render_GET(self, req): + try: + if self.use_sxp(req): + req.setHeader("Content-Type", sxp.mime_type) + self.ls_vnet(req, 1) + else: + req.write("") + self.print_path(req) + self.ls(req) + self.ls_vnet(req) + self.form(req) + req.write("") + return '' + except Exception, ex: + self._perform_err(ex, req) + + def ls_vnet(self, req, use_sxp=0): + url = req.prePathURL() + if not url.endswith('/'): + url += '/' + if use_sxp: + vnets = self.xvnet.vnet_ls() + sxp.show(vnets, out=req) + else: + vnets = self.xvnet.vnets() + vnets.sort(lambda x, y: cmp(x.id, y.id)) + req.write('') + + def form(self, req): + """Generate the form(s) for vnet dir operations. + """ + req.write('
' + % req.prePathURL()) + req.write('') + req.write('Config
') + req.write('
') diff --git a/tools/python/xen/xend/server/netif.py b/tools/python/xen/xend/server/netif.py index 0d841e2b68..ec85df8f8e 100755 --- a/tools/python/xen/xend/server/netif.py +++ b/tools/python/xen/xend/server/netif.py @@ -9,6 +9,7 @@ from xen.xend import sxp from xen.xend import Vifctl from xen.xend.XendError import XendError from xen.xend.XendLogging import log +from xen.xend import XendVnet import channel import controller @@ -176,6 +177,9 @@ class NetDev(controller.Dev): """Bring the device up or down. """ Vifctl.vifctl(op, **self.vifctl_params(vmname=vmname)) + vnet = XendVnet.instance().vnet_of_bridge(self.bridge) + if vnet: + vnet.vifctl(op, self.get_vifname(), self.get_mac()) def destroy(self): """Destroy the device's resources and disconnect from the back-end -- 2.30.2